package servidor.bbdd.subsistema3;

import static org.junit.Assert.*;
import servidor.bbdd.GestorDiscoConexion;
import servidor.bbdd.subsistema3.GestorSubsistema3;

import org.junit.Test;

import common.EOlympicsException;

public class GestorSubsistema3Test {

	@Test
	public void testGetNumProves() {
		System.out.println("INICI PROVA GetNumProves");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String numProves = null;
		try { numProves = gs1.getNumProves(); } catch (Exception e) { fail("Error al recuperar el numero de pruebas"); }
		
		System.out.println("Num Proves: " + numProves);
		
		assertNotNull(numProves);
		assertTrue("6".equals(numProves));
		
		System.out.println("FI PROVA GetNumProves\n");
	}

	@Test
	public void testGetNumProvesCurs() {
		System.out.println("INICI PROVA getNumProvesCurs");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String numProvesCurs = null;
		String estat1 = "En competicio previa";
		String estat2 = "En competicio final";
		try { numProvesCurs = gs1.getNumProvesCurs(estat1,estat2); } catch (Exception e) { fail("Error al recuperar el numero de pruebas en curso: " + e); }
		
		System.out.println("Estat incial: " + estat1);
		System.out.println("Estat final: " + estat2);
		System.out.println("Num Proves en Cus: " + numProvesCurs);
		
		assertNotNull(numProvesCurs);
		assertTrue("2".equals(numProvesCurs));
		
		estat1 = "estat fictici 1";
		estat2 = "estat fictici 2";
		try { numProvesCurs = gs1.getNumProvesCurs(estat1,estat2); } catch (Exception e) { fail("Error al recuperar el numero de pruebas en curso: " + e); }
		
		System.out.println("Estat incial: " + estat1);
		System.out.println("Estat final: " + estat2);
		System.out.println("Num Proves en Cus: " + numProvesCurs);
		
		assertNotNull(numProvesCurs);
		assertTrue("0".equals(numProvesCurs));
		
		System.out.println("FI PROVA getNumProvesCurs\n");
	}

	@Test
	public void testGetNumProvesFinalitzades() {
		System.out.println("INICI PROVA getNumProvesFinalitzades");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String numProvesFinal = null;
		String estat = "Classificacio final";
		try { numProvesFinal = gs1.getNumProvesFinalitzades(estat); } catch (Exception e) { fail("Error al recuperar el numero de pruebas finalitzades: " + e); }
		assertNotNull(numProvesFinal);
		assertTrue("1".equals(numProvesFinal));
		
		estat = "Classificacio";
		try { numProvesFinal = gs1.getNumProvesFinalitzades(estat); } catch (Exception e) { fail("Error al recuperar el numero de pruebas finalitzades: " + e); }
		assertNotNull(numProvesFinal);
		assertTrue("0".equals(numProvesFinal));
		
		System.out.println("FI PROVA getNumProvesFinalitzades\n");
	}

	@Test
	public void testGetNumProvesInscrites() {
		System.out.println("INICI PROVA getNumProvesInscrites");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String numProvesInscrites = null;
		String estat = "Inscripcio";
		try { numProvesInscrites = gs1.getNumProvesInscrites(estat); } catch (Exception e) { fail("Error al recuperar el numero de pruebas inscritas: " + e); }
		assertNotNull(numProvesInscrites);
		assertTrue("3".equals(numProvesInscrites));
		
		estat = "estat fictici";
		try { numProvesInscrites = gs1.getNumProvesInscrites(estat); } catch (Exception e) { fail("Error al recuperar el numero de pruebas inscritas: " + e); }
		assertNotNull(numProvesInscrites);
		assertTrue("0".equals(numProvesInscrites));
		
		System.out.println("FI PROVA getNumProvesInscrites\n");
	}

	@Test
	public void testGetNumEstudiantsInscrits() {
		System.out.println("INICI PROVA getNumEstudiantsInscrits");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String numEstInscrits = null;
		try { numEstInscrits = gs1.getNumEstudiantsInscrits(); } catch (Exception e) { fail("Error al recuperar el numero de estudiantes inscritos: " + e); }
		assertNotNull(numEstInscrits);
		assertTrue("11".equals(numEstInscrits));
		
		System.out.println("FI PROVA getNumEstudiantsInscrits\n");
	}

	@Test
	public void testGetPuntuacioMitjana() {
		System.out.println("INICI PROVA getPuntuacioMitjana");
		
		GestorDiscoConexion gbd = new GestorDiscoConexion();
		try { gbd.conectarBD(); } catch (EOlympicsException e) { fail(e.getLocalizedMessage()); }
		GestorSubsistema3 gs1 = new GestorSubsistema3(gbd);
		
		String puntuacio = null;
		try { puntuacio = gs1.getPuntuacioMitjana(); } catch (Exception e) { fail("Error al recuperar la puntuacion media: " + e); }
		assertNotNull(puntuacio);
		assertTrue("6.5".equals(puntuacio)); 
		
		System.out.println("FI PROVA getPuntuacioMitjana\n");
	}

}
